package com.wyp168.socket.tcp.upload;

import com.wyp168.socket.utils.StreamUtils;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 应用案例4
 * 1.编写一个服务端 和 一个客户端
 * 2.服务端在9002 端口监听
 * 3.客户端连接到服务端，发送一张图片 c:\\com\wyp168.jpg
 * 4.服务端接收到 客户端发送的图片， 保存到src 下，发送”收到图片“ 再退出
 * 5.客户端接收到服务器端发送的”收到图片“， 再退出
 * 6.该程序要求使用StreamUtils.java 工具类
 */
public class Server {
    public static void main(String[] args) throws Exception {
        //1. 服务器端再本机监听9002 端口
        ServerSocket serverSocket = new ServerSocket(9002);
        System.out.println("服务端已启动，在8888端口监听...");
        //2. 等待连接
        Socket socket = serverSocket.accept();
        System.out.println(socket.getPort());

        //3. 读取客户端发送的图片数据
        //   通过socket得到输入流
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        //通过输入流， 获取到一个字节数组
        byte[] bytes = StreamUtils.streamToByteArray(bis);
        //4. 将得到的 bytes数组，写入到指定的路径， 就得到一个文件
        String destPath = "/Users/wangyuanpeng/com/wyp168.bak.jpg";
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath));
        bos.write(bytes);
        bos.close();
        bos.flush();

        //告诉客户端已收到文件
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("收到文件".getBytes());
        outputStream.flush();
        socket.shutdownOutput();    //设置结束标记

        //关闭其他资源
        outputStream.close();
        bis.close();
        socket.close();
        serverSocket.close();
    }
}
